package cn.spdb.harrier.rpc.common;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolManager {

	private static class ThreadPoolManagerIner {
		private static ThreadPoolManager instance = new ThreadPoolManager();
	}

	private static final long KEEP_ALIVE_TIME = 200;
	private static final int WORK_QUEUE_SIZE = 60;

	public static ThreadPoolManager getInstance() {
		return ThreadPoolManager.ThreadPoolManagerIner.instance;
	}

// 初始化线程池，核心线程数为 CPU 核心数的 2 倍，最大线程数为 CPU 核心数的 4 倍
// 空闲线程超时时间为 KEEP_ALIVE_TIME 秒
// 使用有界队列 ArrayBlockingQueue 存放等待执行的任务，队列容量为 WORK_QUEUE_SIZE
// 拒绝策略为 DiscardPolicy，即当任务被拒绝时直接丢弃任务（不抛出异常）
private ExecutorService executorService = new ThreadPoolExecutor(
    Runtime.getRuntime().availableProcessors() * 2, // 核心线程数
    Runtime.getRuntime().availableProcessors() * 4, // 最大线程数
    KEEP_ALIVE_TIME, TimeUnit.SECONDS, // 空闲线程存活时间及单位
    new ArrayBlockingQueue<Runnable>(WORK_QUEUE_SIZE), // 任务等待队列
    new ThreadPoolExecutor.DiscardPolicy()); // 拒绝策略：丢弃新提交的任务

	public void addExecute(Runnable task) {
		executorService.submit(task);
	}
}
